package com.ruoyi.exen.common.mapper;

import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.exen.common.domain.Hrmdepartment;
import com.ruoyi.exen.common.domain.Hrmjobtitles;
import com.ruoyi.exen.common.domain.Hrmresource;
import com.ruoyi.exen.common.domain.Hrmsubcompany;
import com.ruoyi.system.domain.SysUserPost;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * OA组织架构
 */
public interface OrganizationalStructureMapper {


    /**
     * 获取OA人员信息层
     *
     * @return 人员信息
     */
    @DataSource(value = DataSourceType.SLAVE)
    List<Hrmresource> getOAUsers();

    /**
     * 通过工号判断此用户是否存在
     * @param jobNumber 工号
     * @return 用户id
     */
    Integer checkUserByJobNumber(@Param("jobNumber") String jobNumber);


    /**
     * 新增OA用户
     * @param oaUser 用户
     */
    void insertOAUser(Hrmresource oaUser);

    /**
     * 更新用户
     * @param oaUser OA用户
     */
    void updateOAUser(Hrmresource oaUser);

    /**
     * 获取分部信息
     *
     * @return 分部信息
     */
    @DataSource(value = DataSourceType.SLAVE)
    List<Hrmsubcompany> getHrmsubcompany();


    /**
     * 校验分部是否存在
     *
     * @param id 分部id
     * @return 分部信息
     */
    Hrmsubcompany checkHrmsubcompany(@Param("id") String id);

    /**
     * 新增分部管理
     *
     * @param hrmsubcompany 分部管理
     * @return 结果
     */
    int insertHrmsubcompany(Hrmsubcompany hrmsubcompany);

    /**
     * 修改分部管理
     *
     * @param hrmsubcompany 分部管理
     * @return 结果
     */
    int updateHrmsubcompany(Hrmsubcompany hrmsubcompany);


    /**
     * 获取OA部门信息
     *
     * @return OA部门信息
     */
    @DataSource(value = DataSourceType.SLAVE)
    List<Hrmdepartment> getSysDepts();


    /**
     * 查询部门是否存在
     *
     * @return 部门
     */
    Integer checkDept(@Param("id") int id);


    /**
     * 新增部门信息
     *
     * @param dept 部门信息
     * @return 结果
     */
    int insertDept(Hrmdepartment dept);

    /**
     * 修改部门信息
     *
     * @param dept 部门信息
     * @return 结果
     */
    int updateDept(Hrmdepartment dept);


    /**
     * 获取OA岗位信息
     *
     * @return OA部门信息
     */
    @DataSource(value = DataSourceType.SLAVE)
    List<Hrmjobtitles> getSysPosts();


    /**
     * 查询岗位是否存在
     *
     * @return 部门
     */
    Integer checkPost(@Param("postId") int postId);


    /**
     * 修改岗位信息
     *
     * @param post 岗位信息
     * @return 结果
     */
    int updatePost(Hrmjobtitles post);

    /**
     * 新增岗位信息
     *
     * @param post 岗位信息
     * @return 结果
     */
    int insertPost(Hrmjobtitles post);

    /**
     * 获取同步后的人员信息
     *
     * @return 人员信息
     */
    List<SysUser> getUsersByExen();

    /**
     * 查询用户岗位列表
     * @param userId 用户id
     * @param postId 岗位id
     * @return 用户岗位
     */
    SysUserPost checkUserAndPost(@Param("userId") Long userId, @Param("postId") Long postId);

    /**
     * 添加用户岗位关系
     * @param userId 用户id
     * @param postId 部门id
     * @return 结果
     */
    int insertUserAndPost(@Param("userId") Long userId, @Param("postId") Long postId);
}
